import Vue from 'vue'
import router from '../router'

var host = "http://localhost"

/**
 * 封装的发送请求的方法
 
 
 ajax({
	 type: "GET",
	 url: "/user/login",
	 data: {
		 
	 },
	 success: function(data){
		 
	 }
 });
 
 
 */
function ajax(params){
	
	Vue.axios({
		method: params.type ? params.type : "GET",
		url: host + params.url,
		params: (params.type == "GET" || !params.type) ? params.data : {},
		data:  params.type == "POST" ? params.data : {},
		headers: {
			token: window.localStorage.getItem("jwtToken")
		}
	}).then((result) => {
		//获取服务器返回的R对象
		var r = result.data;
		
		if(r.code == 200) {
			//处理成功的响应
			if(params.success){
				//执行传入的Success方法
				params.success(r.data);
			}
		} else if(r.code == 409){
			//参数校验异常
			var errs = r.data;
			Vue.prototype.$message({
				message: errs[0],
				type: "error"
			})
		} else if(r.code == 414) {
			//令牌过期
			Vue.prototype.$message({
				message: r.msg,
				type: "error"
			})
			
			//跳转到登录页面
			// router.push("/");
		} else {
			//直接弹出msg信息
			Vue.prototype.$message({
				message: r.msg,
				type: "error"
			})
		}
	})
	
}



//返回图片的访问地址
function getImg(fileName){
	return host + "/file/download?fileName=" + fileName;
}

//解析jwt令牌
function parseJwt(token) {
	if(!token){
		return null;
	}
	let strings = token.split("."); //截取token，获取载体
	//通过base64解码
	var result = new Base64().decode(strings[1].replace(/-/g, "+").replace(/_/g, "/")).trim();
	var userinfo = JSON.parse(result);
	return userinfo;
}

function getUser(){
	//获取jwt令牌
	var jwtToken = window.localStorage.getItem("jwtToken");
	
	//解析令牌
	var user = parseJwt(jwtToken);
	return user;
}


//缓存好友列表的消息
function saveFriendsList(friendsList){
	window.localStorage.setItem(
		"friendsinfo-" + getUser().id,
		JSON.stringify(friendsList));
}

//根据好友id查询还有信息
function getFriendInfo(fid) {
	var friendsJson = window.localStorage.getItem("friendsinfo-" + getUser().id);
	if(friendsJson){
		//获得缓存的好友列表
		var friendsList = JSON.parse(friendsJson);
		
		//循环
		for(var i = 0; i < friendsList.length; i++) {
			var friend = friendsList[i];
			if(friend.fid == fid) {
				return friend;
			}
		}
	}
	return null;
}

/**
 * 缓存消息列表
 * [{
	//发送者id
	uid: msgObj.from,
	//消息的发送时间
	sendTime: new Date().getTime(),
	//消息类型 1-文本 2-图片
	type: msgObj.type,
	//消息的内容
	content: msgObj.content
}]
 * 
 */
function saveMsgList(fid,msgObj){
	var msgList = getMsgList(fid);
	//添加一个新的消息
	msgList.push(msgObj);
	//保存到本地
	window.localStorage.setItem("msglist-" + getUser().id + "-" + fid, JSON.stringify(msgList));
}

/**
 * 查询当前好友的聊天记录
 * @param {Object} fid
 */
function getMsgList(fid){
	var msgJson = window.localStorage.getItem("msglist-" + getUser().id + "-" + fid);
	var msgList = [];
	if(msgJson){
		msgList = JSON.parse(msgJson);
	}
	
	return msgList;
}


/** 
 * 自定义Base64编解码的方法
 * 
 * @author haitao.tu 
 * @date 2010-04-26 
 * @email tuhaitao@foxmail.com 
 * 
 */
function Base64() {

	// private property 
	var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

	// public method for encoding 
	this.encode = function(input) {
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;
		input = this._utf8_encode(input);
		while (i < input.length) {
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}
			output = output +
				_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
				_keyStr.charAt(enc3) + _keyStr.charAt(enc4);
		}
		return output;
	}

	// public method for decoding 
	this.decode = function(input) {
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;
		input = input.replace(/[^A-Za-z0-9+/=]/g, "");
		while (i < input.length) {
			enc1 = _keyStr.indexOf(input.charAt(i++));
			enc2 = _keyStr.indexOf(input.charAt(i++));
			enc3 = _keyStr.indexOf(input.charAt(i++));
			enc4 = _keyStr.indexOf(input.charAt(i++));
			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;
			output = output + String.fromCharCode(chr1);
			if (enc3 != 64) {
				output = output + String.fromCharCode(chr2);
			}
			if (enc4 != 64) {
				output = output + String.fromCharCode(chr3);
			}
		}
		output = this._utf8_decode(output);
		// 替换不可见的特殊字符
		output = output.replace(/[\n\r\t]/g, "");
		output = output.trim();
		output = output.substring(0, output.lastIndexOf("}") + 1);
		return output;
	}

	// private method for UTF-8 encoding 
	this._utf8_encode = function(string) {
		string = string.replace(/rn/g, "n");
		var utftext = "";
		for (var n = 0; n < string.length; n++) {
			var c = string.charCodeAt(n);
			if (c < 128) {
				utftext += String.fromCharCode(c);
			} else if ((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			} else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}

		}
		return utftext;
	}

	// private method for UTF-8 decoding 
	this._utf8_decode = function(utftext) {
		var string = "";
		var i = 0;
		var c = 0;
		var c1 = 0;
		var c2 = 0;
		var c3 = 0;
		while (i < utftext.length) {
			c = utftext.charCodeAt(i);
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			} else if ((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i + 1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			} else {
				c2 = utftext.charCodeAt(i + 1);
				c3 = utftext.charCodeAt(i + 2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
		}
		return string;
	}
}


/**
 * 全局声明
 */
export default{
	host,
	getImg,
	parseJwt,
	getUser,
	ajax,
	saveFriendsList,
	getFriendInfo,
	saveMsgList,
	getMsgList
}